package com.thz.system.utils.cos;

import com.thz.common.utils.FileUtils;
import com.thz.system.config.CosConfig;
import com.thz.system.service.cos.ICosFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;

/**
 * COS文件工具类
 * 统一文件存储接口，根据配置自动选择本地存储或COS存储
 * 
 * @author THZ
 * @date 2025
 */
@Slf4j
@Component
public class CosFileUtils {
    
    @Autowired(required = false)
    private ICosFileService cosFileService;
    
    @Autowired
    private CosConfig cosConfig;
    
    /**
     * 保存上传的文件（直接使用COS存储）
     * 
     * @param file 上传的文件
     * @param localDir 本地目录（已废弃，保留参数以兼容）
     * @param cosPrefix COS路径前缀
     * @return 文件访问URL
     */
    public String saveUploadFile(MultipartFile file, String localDir, String cosPrefix) {
        // 直接使用COS存储
        log.info("使用COS存储文件: {}", file.getOriginalFilename());
        return cosFileService.uploadFile(file, cosPrefix);
    }
    
    /**
     * 上传本地文件到COS
     * 
     * @param localFile 本地文件
     * @param cosPrefix COS路径前缀
     * @return 文件访问URL
     */
    public String uploadLocalFile(File localFile, String cosPrefix) {
        log.info("上传本地文件到COS: {}", localFile.getAbsolutePath());
        return cosFileService.uploadFile(localFile, cosPrefix);
    }
    
    /**
     * 删除COS文件
     * 
     * @param filePath COS文件URL
     */
    public void deleteFile(String filePath) {
        if (filePath == null || filePath.isEmpty()) {
            return;
        }
        
        // 删除COS文件
        log.info("删除COS文件: {}", filePath);
        cosFileService.deleteFile(filePath);
    }
    
    /**
     * 下载COS文件到本地（用于需要本地处理的场景）
     * 
     * @param fileUrl COS文件URL
     * @param localFilePath 本地保存路径
     */
    public void downloadToLocal(String fileUrl, String localFilePath) {
        log.info("从COS下载文件到本地: {} -> {}", fileUrl, localFilePath);
        cosFileService.downloadFile(fileUrl, localFilePath);
    }
    
    /**
     * 获取文件URL（用于前端访问）
     * 
     * @param filePath COS文件URL或COS key
     * @param serverDomain 服务器域名（已废弃，保留参数以兼容）
     * @return 文件访问URL
     */
    public String getFileUrl(String filePath, String serverDomain) {
        if (filePath == null || filePath.isEmpty()) {
            return "";
        }
        
        // 如果已经是URL，直接返回
        if (filePath.startsWith("http://") || filePath.startsWith("https://")) {
            return filePath;
        }
        
        // 如果是COS key，生成COS URL
        return cosFileService.getFileUrl(filePath);
    }
    
    /**
     * 判断是否是COS URL
     * 
     * @param url URL字符串
     * @return true-是COS URL, false-不是
     */
    public boolean isCosUrl(String url) {
        if (url == null || url.isEmpty()) {
            return false;
        }
        
        if (cosFileService != null) {
            return cosFileService.isCosUrl(url);
        }
        
        return false;
    }
    
    /**
     * 判断COS是否启用
     * 
     * @return true-启用, false-未启用
     */
    public boolean isCosEnabled() {
        return cosConfig.getEnabled() && cosFileService != null;
    }
}

